package com.wyx.controller;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.wyx.annotation.MethodEventDescription;
import com.wyx.httpService.shanxitobaccoService.OrderShanxiTobaccoCrawlerService;
import com.wyx.httpService.shanxitobaccoService.impl.SmokeInfoShanxiTobaccoCrawlerServiceImpl;
import com.wyx.pojo.Smoke;
import com.wyx.pojo.httpSmokeBean.shanxitobaccobean.response.OrderingInformation;
import com.wyx.pojo.httpSmokeBean.shanxitobaccobean.response.ProdLimitInfos;
import com.wyx.pojo.ProductBeanResult;
import com.wyx.pojo.result.CODE;
import com.wyx.pojo.result.CheckInfo;
import com.wyx.pojo.result.CheckInfoRes;
import com.wyx.pojo.result.Result;
import com.wyx.service.SmokeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author 吴宇~
 * @motto 我亦无他，唯手熟尔。
 * @edition jdk1.8
 * @reflection 0-1 喧闹任其喧闹，自由我自为之，我自风情万种，与世无争。
 * @date 2024/04/04/20:49
 * @target 心若有所向往，何惧道阻且长
 */
@RestController
@RequestMapping("/smoke")
public class SmokeController {
    @Autowired
    private SmokeService smokeService;

    /**
     * TODO：下载订单图片  可以传递一些参数，是否为最新订单，或者是什么时候的订单。。传递什么参数再说
     */
    @GetMapping("/downOrderPic/{templateName}")
    public ResponseEntity<byte[]> downLastOrderPic(@PathVariable String templateName) throws FileNotFoundException {
        //在这儿要不做一个判断，如果是第一次下载， 进行一个数据的存储。 之后的话就查询数据库就得了。
        byte[] bytes = smokeService.getLastOrderPic(templateName);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "order.jpg"); // 设置下载文件的文件名
        return ResponseEntity.ok()
                .headers(headers)
                .body(bytes);
    }

    /**
     * 下载预计订单烟的图片
     * @return 返回图片信息
     */
    @GetMapping("/downAnticipatedOrderPic/anticipatedOrderPic")
    public ResponseEntity<byte[]> getAnticipatedOrderPic() {
        byte[] weeklySupplyPlacementStrategyInformation = smokeService.getWeeklySupplyPlacementStrategyInformation();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment","anticipatedOrder" ); // 设置下载文件的文件名
        return ResponseEntity.ok()
                .headers(headers)
                .body(weeklySupplyPlacementStrategyInformation);
    }

    @GetMapping("/downExcel")
    public byte[] downExcel() {
        return null;
    }

    //    http://localhost:8005/smoke/list/listTemplate2_1
//    http://localhost:8005/smoke/list/listTemplate2   笔记
//    http://localhost:8005/smoke/list/listTemplate1
    @GetMapping("/list/{templateType}")
    public ResponseEntity<byte[]> downSmokeListPic(@PathVariable String templateType) {
        byte[] bytes = smokeService.getSmokeListPicByte(templateType);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "list.jpg"); // 设置下载文件的文件名
        return ResponseEntity.ok()
                .headers(headers)
                .body(bytes);
    }

    //查询当前的烟和之前的烟是否一致，如果一致就一致，如果不一致返回就返回不一致的数据集合。前后的对照表。
    //现在的需求是啥呢？  想要看到两个的差距，在前端显示。  哪个部分有修改，有更新了。
    @PostMapping("isDataConsistency")
    @MethodEventDescription(event = "比较数据库和网页信息")
    public Result check() {
        CheckInfoRes checkInfoRes = smokeService.checkInfo();
        if (checkInfoRes == null) {
            return Result.success("全部为最新的数据");
        }
        return Result.success(checkInfoRes);
    }


    /**
     * 更新的话应该把 所有的更新都放在一块儿， 可以在前端输出一些日志，
     * 。。。完成
     * 。。。失败
     * 。。。异常等。
     * 主要从 几个维度 基本的数据库信息。 barCode、Ciar 。 还有一个图片，
     * 做的话可以是前端一个一个的来。在前端运行一个任务，一个一个的来，保存第一次生成的  序列号。
     * 或者的话 统一后端调用， 看看怎么回复以下好。
     *
     * @param checkInfoRes
     * @return
     */

    @PostMapping("updateDate")
    @MethodEventDescription(event = "更新数据库")
    public Result updateDate(@RequestBody CheckInfoRes checkInfoRes) {
        CheckInfoRes checkInfoRes1 = smokeService.updateDatabase(checkInfoRes);
        if (checkInfoRes1 == null) {
            return Result.fail("当前差异无效,请重新获取差异", CODE.SMOKE_DIFFERENCE_EXPIRATION);
        }
        return Result.success(checkInfoRes1, "更新成功");
    }

    /**
     * 更细未更新的字段  。这个接口还没有验证，
     */
    @PostMapping("/updateOtherData")
    public Result updateOtherData() {
        Map map = smokeService.updateOtherData();
        return Result.success(map, "更新成功");
    }

    /**
     * 下载未下载的图片到本地
     */
    @GetMapping("/downDeficiencyPic")
    public Result downDeficiencyPic() {
        Map<String, List<String>> resMaps = smokeService.downDeficiencyPic();
        return Result.success(resMaps);
    }
    //更新这几个字段， 彻底去除PRODUCT 为 查询数据库的方式。只能作为 网站的查询结果的bean。

    /**
     * 查询最新批次变更的烟  在这儿 的接口是返回 多少条修改。 这个位置的接口就相当于一个新闻一样，显示多少条。
     *
     * @return
     */
    @PostMapping("/queryLatelyAltered")
    public Result queryLatestBatchChangedSmokes() {
        smokeService.queryLatelyAlertSmoke();
        return null;
    }

    //查询所有更改批次。返回一个集合。里面有批次id。批次时间。 批次创建人， 批次更改有多少条
    @PostMapping("/queryAllChangeBatch")
    public Result queryAllSmokeBatch() {
        return null;
    }

    @PostMapping("/queryChangeByBatch/{id}")
    public Result queryChangeByBatch(@PathVariable String id) {
        return null;
    }


}
